<?php

include_once (APPLICATION_PATH."/library/Excel/PEAR.php");
include_once (APPLICATION_PATH."/library/Excel/Writer.php");



/**
 * Sgit_Pdf
 * 
 * @package   
 * @author sgit_development
 * @copyright juanma
 * @version 2012
 * @access public
 */
class Sgit_Excel extends Spreadsheet_Excel_Writer
{

    protected $_header=array();
    protected $_keys=array();
    protected $_width=array();
    protected $_format=array();



    function setColumnas($columnas)
    {        
        $translate= Zend_Registry::get('Zend_Translate');
        
        foreach($columnas as $k => $col){
            $this->_header[$k]=$translate->translate($col['header']);
            $this->_keys[$k]=$col['key'];
            $this->_width[$k]=20;//($col['width']) ? $col['width'] : 20;
            $this->_format[$k]=$col['format'];
        }
    }
    
    function SetTitle($title,$subtitle='')
    {
        $this->title=$title;
        if($subtitle)$this->subtitle=$subtitle;
    }
    
    function SetSubTitle($subtitle='')
    {
        $this->subtitle=$subtitle;
    }

    function resaltarRows($rows)
    { 
        if($rows) $this->_resaltar_row=$rows;
    }
    


    public function render($rows,$file=''){


		$size=7.5;

		// Creamos un libro de excel que sirve como nuestro espacio de trabajo.
	

		// Estableceremos nuestro formato Negrita para usarlo en el documento
		$header =& $this->addFormat();
		$header->setBold();
		$header->setHAlign('merge');
		$header->setBgColor('50');
		$header->setSize($size);
        $header->setAlign('center');
        $header->setTextWrap(1);
        $header->setBorder(1);
 

		$a =& $this->addFormat();
		$a->setHAlign('left');
		$a->setSize($size);
		$a->setTextWrap();
        $a->setBorder(1);
        $a->setAlign('top');
		
		$b =& $this->addFormat();
		$b->setHAlign('left');
		$b->setSize($size);
		$b->setBgColor(41);//31
		$b->setTextWrap();
        $b->setBorder(1);
        $b->setAlign('top');
	
	    $resalta =& $this->addFormat();
		$resalta->setHAlign('left');
		$resalta->setSize(8.5);
		$resalta->setBgColor(5);//31
		$resalta->setTextWrap();
        $resalta->setBorder(1);
        $resalta->setAlign('top');
	
        

        
		// Necesitamos una hoja en la cual poner nuestros datos
		$hoja =& $this->addWorksheet('Hoja1');
		

		$hoja->freezePanes(array(2, 0));
		
		$hoja->setHeader($file);
		
		$i=0;
		foreach($this->_width as $v){
			$hoja->setColumn($i,$i, $v);
			$i++;
		}
		
		
		// Verificamos que la hoja se haya generado correctamente
		if (PEAR::isError($hoja)) {
		    die($hoja->getMessage());
		}
		
        $i=0;
        $hoja->write(0, $i,iconv('UTF-8', 'windows-1252', $this->title.' '.$this->subtitle), $header);
        $hoja->setMerge(0, 0 , 0 , count($this->_header)-1 );
		
		$i=0;
		foreach ($this->_header as $v) {
            $v=str_replace(chr(128),' Euros',$v);
		    $hoja->write(1, $i++, iconv('UTF-8', 'windows-1252',$v), $header);
		}
        

        
        
		$j=2;
		foreach ($rows as $r) {
			$c=($c=='a') ? 'b' : 'a';
            if(in_array($j-2,$this->_resaltar_row)){
                $c='resalta';
            }
            
			$i=0;
       
            foreach($this->_keys as $k => $v){
      
                //este bloque para leer subarrays separados por ||
               
               if(strpos($v,'||')){
                        $fila=$r;
                        foreach(explode('||',$v) as $w){
                            $fila=$fila[$w];
                        }
                        $value=$fila;
                }else{
                        $value=$r[$v];
                }
                //end       
                       
                if(is_numeric($value))
                {
                    if($this->_format[$k] && function_exists($this->_format[$k]))
                    {
                       $value=call_user_func($this->_format[$k], $value);
                    }
                        $hoja->writeNumber($j, $i++, $value, $$c);
                    }else{
                        $hoja->writeString($j, $i++, utf8_decode($value), $$c);
                    }
            }

            
            
  
			$j++;
		}


		if(empty($file))$file='sgit';
		
		
		// Generamos nuestro libro de excel
		$this->send($file.'.xls');
		$this->close();
			
		return true;
	}
 }
 
 
 
//formateadores a traves format y callback
function entero($val)
{
    return round($val);

}
function dec0($val)
{
    return round($val,0);
}
function dec2($val)
{
    return round($val,2);
}
function dec4($val)
{
    return round($val,4);
}
function fecha($val)
{
    return Sgit_Filter_DateDbToLocalize::filter($val);
}
function sala($val)
{
    return Sgit_Cache::single()->model('Salas')->getKey($val);
}